//初始化
//搭建服务器
//连接数据库
const http = require('http');
const app = http.createServer();

//解析post 请求数据
const querystring = require('querystring');

//引入mongoose
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/lilyTest03',{
	useNewUrlParser: true,
	useUnifiedTopology: true
}).then(()=>{
	console.log('数据库连接成功！')
}).catch(err => {
	console.log('数据库创建失败')
})

//创建集合规则
const myinfor = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlength: [2, '最小值不能少于2个字符'],
        maxlength: [100, '最大值不能超过100个字符']

    },
    age: {
        type: Number,
        min: [5, '年龄不能低于5'],
        max: [10000, '年龄最大不能超过10000']

    },
    sex: String,
    email: String,
    hobbies: [String],
    collage: String,
    enterDate: {
        type: Date,
        default: Date.now
    }

})
//调用创建集合规则进行创建集合名字
const myInfor = mongoose.model('Myinfor', myinfor)


//安装模板引擎
const template = require('art-template');
const path = require('path');
//配置根路径
template.defaults.root = path.join(__dirname,'views');

/* //格式化时间
 安装第三方模块  npm i dateformat
 引入
 自定义格式化
 */
const dateFormat = require('dateformat');
template.defaults.imports.myformat = dateFormat;

//静态资源托管 一般我们需要托管的是第三方 css less img
/* 
安装 npm i serve-static 
引入
使用返回值进行托管
把托管后的值挂服务器
 */
const serveStatic = require('serve-static');
const serve = serveStatic(path.join(__dirname,'public'))












//实现node js路由功能（调用第三方模块 )
const Router = require('router');
//调用返回值
const router = Router();
//测试路由
router.get('/list',(req,res) =>{
	res.end('get list')
})

router.get('/add',(req,res) =>{
	//get 请求进入到这个add的页面的时候需要加载我们添加的数据
	  let html = template('index.art',{})
	console.log(template.defaults.root)
	
	res.end(html)
})
//路由挂在服务器上


//post请求表单提交数据进行post请求 路由监听
//post 一定要有name属性
//请求得时候两个方法 一个是正在传输数据data 一个是传输完毕之后触发得
router.post('/add',(req,res)=>{
	//post提交数据 怎么获取post提交过来得参数
	let fromData = ''
	req.on('data',(params)=>{
		fromData +=params;
	})
	req.on('end',async ()=>{
		//console.log(fromData);
		let data = querystring.parse(fromData);
		console.log(data);
		
		//向数据库里面添加数据
		/*写法1
		 myInfor.create(data).then(res=>{
			console.log(res);
		})
 */ //写法2
		let successData = await myInfor.create(data);
		//console.log(res);
 
	})
	
	res.end('post add')
})





app.on('request',(req,res)=>{
	//路由挂在服务器上
	router(req,res,() => {
		//console.log('路由触发了')
	})
	//css静态资源挂在服务器上
	serve(req,res,()=>{
		//console.log('css静态资源托管');
	})
	
	
	//res.end('ok')
})

app.listen(8888,()=>{
	console.log('http://localhost:8888')
})







